Micron Document
NexusPi Git Node


Displaying Raw • Download

lib/microReticulum/src/Cryptography/PKCS7.h 20ec0b4ee3f3e7a8b3c8d00dcdcd5afdcf2bc840 (20ec0b4e) Text, 1.82 KB

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e"../Bytes.h"
T8b949e//#include "../Log.h"

Tff7b72#Tff7b72include T8b949e<stdexcept>

Te6edf3namespace Te6edf3RNS Tb4b4b4{ Te6edf3namespace Te6edf3Cryptography Tb4b4b4{

Te6edf3class Te6edf3PKCS7 Tb4b4b4{

Te6edf3publicTff7b72:

Tff7b72static Tff7b72const Tffa657size_t Te6edf3BLOCKSIZE Tff7b72= T79c0ff16Tb4b4b4;

Tff7b72static Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8ffpadTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3bs Tff7b72= Te6edf3BLOCKSIZETb4b4b4) Tb4b4b4{
Te6edf3Bytes Te6edf3paddedTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Te6edf3inplace_padTb4b4b4(Te6edf3paddedTb4b4b4, Te6edf3bsTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3paddedTb4b4b4;
Tb4b4b4}

Tff7b72static Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8ffunpadTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3bs Tff7b72= Te6edf3BLOCKSIZETb4b4b4) Tb4b4b4{
Te6edf3Bytes Te6edf3unpaddedTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Te6edf3inplace_unpadTb4b4b4(Te6edf3unpaddedTb4b4b4, Te6edf3bsTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3unpaddedTb4b4b4;
Tb4b4b4}

T8b949e// updates passed buffer
Tff7b72static Tff7b72inline Tffa657void Td2a8ffinplace_padTb4b4b4(Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3bs Tff7b72= Te6edf3BLOCKSIZETb4b4b4) Tb4b4b4{
Tffa657size_t Te6edf3len Tff7b72= Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//DEBUG("PKCS7::pad: len: " + std::to_string(len));
Tffa657size_t Te6edf3padlen Tff7b72= Te6edf3bs Tff7b72- Tb4b4b4(Te6edf3len Tff7b72% Te6edf3bsTb4b4b4)Tb4b4b4;
T8b949e//DEBUG("PKCS7::pad: pad len: " + std::to_string(padlen));
T8b949e// create zero-filled byte padding array of size padlen
T8b949e//uint8_t pad[padlen] = {0};
Tffa657uint8_t Te6edf3padTb4b4b4[Te6edf3padlenTb4b4b4]Tb4b4b4;
Te6edf3memsetTb4b4b4(Te6edf3padTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3padlenTb4b4b4)Tb4b4b4;
T8b949e// set last byte of padding array to size of padding
Te6edf3padTb4b4b4[Te6edf3padlenT79c0ff-1Tb4b4b4] Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3padlenTb4b4b4;
T8b949e// concatenate data with padding
Te6edf3dataTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3padTb4b4b4, Te6edf3padlenTb4b4b4)Tb4b4b4;
T8b949e//DEBUG("PKCS7::pad: data size: " + std::to_string(data.size()));
Tb4b4b4}

T8b949e// updates passed buffer
Tff7b72static Tff7b72inline Tffa657void Td2a8ffinplace_unpadTb4b4b4(Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3bs Tff7b72= Te6edf3BLOCKSIZETb4b4b4) Tb4b4b4{
Tffa657size_t Te6edf3len Tff7b72= Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//DEBUG("PKCS7::unpad: len: " + std::to_string(len));
T8b949e// read last byte which is pad length
Tffa657size_t Te6edf3padlen Tff7b72= Tb4b4b4(Tffa657size_tTb4b4b4)Te6edf3dataTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4[Te6edf3dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)T79c0ff-1Tb4b4b4]Tb4b4b4;
T8b949e//DEBUG("PKCS7::unpad: pad len: " + std::to_string(padlen));
Tff7b72if Tb4b4b4(Te6edf3padlen Tff7b72> Te6edf3bsTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffCannot unpad, invalid padding length of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3padlenTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// truncate data to strip padding
T8b949e//return data[:len-padlen]
Te6edf3dataTb4b4b4.Te6edf3resizeTb4b4b4(Te6edf3len Tff7b72- Te6edf3padlenTb4b4b4)Tb4b4b4;
T8b949e//DEBUG("PKCS7::unpad: data size: " + std::to_string(data.size()));
Tb4b4b4}

Tb4b4b4}Tb4b4b4;

Tb4b4b4} Tb4b4b4}

Served by rngit 1.4.2 - Generated in 0.01s